home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1998 August / PC Plus SuperCD 50a Issue 142 (CD142a) (August 1998).iso / trial / demon / TURNPIKE.1 / CLASSES.ZIP / JAVA / LANG / String.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-04-14  |  5.7 KB  |  583 lines

  1. package java.lang;
  2.  
  3. import java.util.Hashtable;
  4.  
  5. public final class String {
  6.    private char[] value;
  7.    private int offset;
  8.    private int count;
  9.    private static Hashtable InternSet;
  10.  
  11.    public String() {
  12.       this.value = new char[0];
  13.    }
  14.  
  15.    public String(String var1) {
  16.       this.count = var1.count;
  17.       this.value = new char[this.count];
  18.       int var2 = this.count;
  19.       char[] var3 = this.value;
  20.       System.arraycopy(var1.value, var1.offset, var3, 0, var2);
  21.    }
  22.  
  23.    public String(char[] var1) {
  24.       this.count = var1.length;
  25.       this.value = new char[this.count];
  26.       System.arraycopy(var1, 0, this.value, 0, this.count);
  27.    }
  28.  
  29.    public String(char[] var1, int var2, int var3) {
  30.       if (var2 < 0) {
  31.          throw new StringIndexOutOfBoundsException(var2);
  32.       } else if (var3 < 0) {
  33.          throw new StringIndexOutOfBoundsException(var3);
  34.       } else if (var2 + var3 > var1.length) {
  35.          throw new StringIndexOutOfBoundsException(var2 + var3);
  36.       } else {
  37.          this.value = new char[var3];
  38.          this.count = var3;
  39.          System.arraycopy(var1, var2, this.value, 0, var3);
  40.       }
  41.    }
  42.  
  43.    public String(byte[] var1, int var2, int var3, int var4) {
  44.       if (var3 < 0) {
  45.          throw new StringIndexOutOfBoundsException(var3);
  46.       } else if (var4 < 0) {
  47.          throw new StringIndexOutOfBoundsException(var4);
  48.       } else if (var3 + var4 > var1.length) {
  49.          throw new StringIndexOutOfBoundsException(var3 + var4);
  50.       } else {
  51.          char[] var5 = new char[var4];
  52.          this.count = var4;
  53.          this.value = var5;
  54.          if (var2 == 0) {
  55.             for(int var8 = var4; var8-- > 0; var5[var8] = (char)(var1[var8 + var3] & 255)) {
  56.             }
  57.  
  58.          } else {
  59.             var2 <<= 8;
  60.  
  61.             for(int var6 = var4; var6-- > 0; var5[var6] = (char)(var2 | var1[var6 + var3] & 255)) {
  62.             }
  63.  
  64.          }
  65.       }
  66.    }
  67.  
  68.    public String(byte[] var1, int var2) {
  69.       this(var1, var2, 0, var1.length);
  70.    }
  71.  
  72.    public String(StringBuffer var1) {
  73.       synchronized(var1){}
  74.  
  75.       try {
  76.          var1.shared = true;
  77.          this.value = var1.value;
  78.          this.offset = 0;
  79.          this.count = var1.count;
  80.       } catch (Throwable var4) {
  81.          throw var4;
  82.       }
  83.  
  84.    }
  85.  
  86.    private String(int var1, int var2, char[] var3) {
  87.       this.value = var3;
  88.       this.offset = var1;
  89.       this.count = var2;
  90.    }
  91.  
  92.    public int length() {
  93.       return this.count;
  94.    }
  95.  
  96.    public char charAt(int var1) {
  97.       if (var1 >= 0 && var1 < this.count) {
  98.          return this.value[var1 + this.offset];
  99.       } else {
  100.          throw new StringIndexOutOfBoundsException(var1);
  101.       }
  102.    }
  103.  
  104.    public void getChars(int var1, int var2, char[] var3, int var4) {
  105.       System.arraycopy(this.value, this.offset + var1, var3, var4, var2 - var1);
  106.    }
  107.  
  108.    public void getBytes(int var1, int var2, byte[] var3, int var4) {
  109.       int var5 = var4;
  110.       int var6 = this.offset + var2;
  111.  
  112.       for(int var7 = this.offset + var1; var7 < var6; var3[var5++] = (byte)this.value[var7++]) {
  113.       }
  114.  
  115.    }
  116.  
  117.    public boolean equals(Object var1) {
  118.       if (var1 != null && var1 instanceof String) {
  119.          String var2 = (String)var1;
  120.          int var3 = this.count;
  121.          if (var3 == var2.count) {
  122.             char[] var4 = this.value;
  123.             char[] var5 = var2.value;
  124.             int var6 = this.offset;
  125.             int var7 = var2.offset;
  126.  
  127.             while(var3-- != 0) {
  128.                if (var4[var6++] != var5[var7++]) {
  129.                   return false;
  130.                }
  131.             }
  132.  
  133.             return true;
  134.          }
  135.       }
  136.  
  137.       return false;
  138.    }
  139.  
  140.    public boolean equalsIgnoreCase(String var1) {
  141.       return var1 != null && var1.count == this.count && this.regionMatches(true, 0, var1, 0, this.count);
  142.    }
  143.  
  144.    public int compareTo(String var1) {
  145.       int var2 = this.count;
  146.       int var3 = var1.count;
  147.       int var4 = var2 <= var3 ? var2 : var3;
  148.       char[] var5 = this.value;
  149.       char[] var6 = var1.value;
  150.       int var7 = this.offset;
  151.       int var8 = var1.offset;
  152.  
  153.       while(var4-- != 0) {
  154.          char var9 = var5[var7++];
  155.          char var10 = var6[var8++];
  156.          if (var9 != var10) {
  157.             return var9 - var10;
  158.          }
  159.       }
  160.  
  161.       return var2 - var3;
  162.    }
  163.  
  164.    public boolean regionMatches(int var1, String var2, int var3, int var4) {
  165.       char[] var5 = this.value;
  166.       int var6 = this.offset + var1;
  167.       int var7 = this.offset + this.count;
  168.       char[] var8 = var2.value;
  169.       int var9 = var2.offset + var3;
  170.       int var10 = var9 + var2.count;
  171.       if (var3 >= 0 && var1 >= 0 && var6 + var4 <= var7 && var9 + var4 <= var10) {
  172.          while(var4-- > 0) {
  173.             if (var5[var6++] != var8[var9++]) {
  174.                return false;
  175.             }
  176.          }
  177.  
  178.          return true;
  179.       } else {
  180.          return false;
  181.       }
  182.    }
  183.  
  184.    public boolean regionMatches(boolean var1, int var2, String var3, int var4, int var5) {
  185.       char[] var6 = this.value;
  186.       int var7 = this.offset + var2;
  187.       int var8 = this.offset + this.count;
  188.       char[] var9 = var3.value;
  189.       int var10 = var3.offset + var4;
  190.       int var11 = var10 + var3.count;
  191.       if (var4 >= 0 && var2 >= 0 && var7 + var5 <= var8 && var10 + var5 <= var11) {
  192.          while(true) {
  193.             if (var5-- <= 0) {
  194.                return true;
  195.             }
  196.  
  197.             char var12 = var6[var7++];
  198.             char var13 = var9[var10++];
  199.             if (var12 != var13) {
  200.                if (!var1) {
  201.                   break;
  202.                }
  203.  
  204.                char var14 = Character.toUpperCase(var12);
  205.                char var15 = Character.toUpperCase(var13);
  206.                if (var14 != var15 && Character.toLowerCase(var14) != Character.toLowerCase(var15)) {
  207.                   break;
  208.                }
  209.             }
  210.          }
  211.  
  212.          return false;
  213.       } else {
  214.          return false;
  215.       }
  216.    }
  217.  
  218.    public boolean startsWith(String var1, int var2) {
  219.       char[] var3 = this.value;
  220.       int var4 = this.offset + var2;
  221.       int var5 = this.offset + this.count;
  222.       char[] var6 = var1.value;
  223.       int var7 = var1.offset;
  224.       int var8 = var1.count;
  225.       if (var2 >= 0 && var4 + var8 <= var5) {
  226.          do {
  227.             --var8;
  228.             if (var8 < 0) {
  229.                return true;
  230.             }
  231.          } while(var3[var4++] == var6[var7++]);
  232.  
  233.          return false;
  234.       } else {
  235.          return false;
  236.       }
  237.    }
  238.  
  239.    public boolean startsWith(String var1) {
  240.       return this.startsWith(var1, 0);
  241.    }
  242.  
  243.    public boolean endsWith(String var1) {
  244.       return this.startsWith(var1, this.count - var1.count);
  245.    }
  246.  
  247.    public int hashCode() {
  248.       int var1 = 0;
  249.       int var2 = this.offset;
  250.       char[] var3 = this.value;
  251.       int var4 = this.count;
  252.       if (var4 < 16) {
  253.          for(int var5 = var4; var5 > 0; --var5) {
  254.             var1 = var1 * 37 + var3[var2++];
  255.          }
  256.       } else {
  257.          int var7 = var4 / 8;
  258.  
  259.          for(int var6 = var4; var6 > 0; var2 += var7) {
  260.             var1 = var1 * 39 + var3[var2];
  261.             var6 -= var7;
  262.          }
  263.       }
  264.  
  265.       return var1;
  266.    }
  267.  
  268.    public int indexOf(int var1) {
  269.       return this.indexOf(var1, 0);
  270.    }
  271.  
  272.    public int indexOf(int var1, int var2) {
  273.       int var3 = this.offset + this.count;
  274.       char[] var4 = this.value;
  275.  
  276.       for(int var5 = this.offset + var2; var5 < var3; ++var5) {
  277.          if (var4[var5] == var1) {
  278.             return var5 - this.offset;
  279.          }
  280.       }
  281.  
  282.       return -1;
  283.    }
  284.  
  285.    public int lastIndexOf(int var1) {
  286.       return this.lastIndexOf(var1, this.count - 1);
  287.    }
  288.  
  289.    public int lastIndexOf(int var1, int var2) {
  290.       int var3 = this.offset;
  291.       char[] var4 = this.value;
  292.  
  293.       for(int var5 = this.offset + (var2 >= this.count ? this.count - 1 : var2); var5 >= var3; --var5) {
  294.          if (var4[var5] == var1) {
  295.             return var5 - this.offset;
  296.          }
  297.       }
  298.  
  299.       return -1;
  300.    }
  301.  
  302.    public int indexOf(String var1) {
  303.       return this.indexOf(var1, 0);
  304.    }
  305.  
  306.    public int indexOf(String var1, int var2) {
  307.       char[] var3 = this.value;
  308.       char[] var4 = var1.value;
  309.       int var5 = this.offset + (this.count - var1.count);
  310.       int var6 = this.offset + (var2 < 0 ? 0 : var2);
  311.  
  312.       label26:
  313.       while(var6 <= var5) {
  314.          int var7 = var1.count;
  315.          int var8 = var6;
  316.          int var9 = var1.offset;
  317.  
  318.          while(var7-- != 0) {
  319.             if (var3[var8++] != var4[var9++]) {
  320.                ++var6;
  321.                continue label26;
  322.             }
  323.          }
  324.  
  325.          return var6 - this.offset;
  326.       }
  327.  
  328.       return -1;
  329.    }
  330.  
  331.    public int lastIndexOf(String var1) {
  332.       return this.lastIndexOf(var1, this.count);
  333.    }
  334.  
  335.    public int lastIndexOf(String var1, int var2) {
  336.       if (var2 < 0) {
  337.          return -1;
  338.       } else {
  339.          if (var2 > this.count - var1.count) {
  340.             var2 = this.count - var1.count;
  341.          }
  342.  
  343.          if (var1.count == 0) {
  344.             return var2;
  345.          } else {
  346.             char[] var3 = this.value;
  347.             char[] var4 = var1.value;
  348.  
  349.             for(int var5 = this.offset + var2; var5 >= this.offset; --var5) {
  350.                int var6 = var1.count;
  351.                int var7 = var5;
  352.                int var8 = var1.offset;
  353.  
  354.                while(var3[var7++] == var4[var8++]) {
  355.                   --var6;
  356.                   if (var6 <= 0) {
  357.                      return var5 - this.offset;
  358.                   }
  359.                }
  360.             }
  361.  
  362.             return -1;
  363.          }
  364.       }
  365.    }
  366.  
  367.    public String substring(int var1) {
  368.       return this.substring(var1, this.count);
  369.    }
  370.  
  371.    public String substring(int var1, int var2) {
  372.       if (var1 > var2) {
  373.          int var3 = var1;
  374.          var1 = var2;
  375.          var2 = var3;
  376.       }
  377.  
  378.       if (var1 < 0) {
  379.          throw new StringIndexOutOfBoundsException(var1);
  380.       } else if (var2 > this.count) {
  381.          throw new StringIndexOutOfBoundsException(var2);
  382.       } else {
  383.          return var1 == 0 && var2 == this.count ? this : new String(this.offset + var1, var2 - var1, this.value);
  384.       }
  385.    }
  386.  
  387.    public String concat(String var1) {
  388.       int var2 = var1.count;
  389.       if (var2 == 0) {
  390.          return this;
  391.       } else {
  392.          char[] var3 = new char[this.count + var2];
  393.          int var4 = this.count;
  394.          System.arraycopy(this.value, this.offset, var3, 0, var4);
  395.          var4 = this.count;
  396.          System.arraycopy(var1.value, var1.offset, var3, var4, var2);
  397.          return new String(0, this.count + var2, var3);
  398.       }
  399.    }
  400.  
  401.    public String replace(char var1, char var2) {
  402.       if (var1 != var2) {
  403.          int var3 = this.count;
  404.          int var4 = -1;
  405.  
  406.          do {
  407.             ++var4;
  408.          } while(var4 < var3 && this.value[this.offset + var4] != var1);
  409.  
  410.          if (var4 < var3) {
  411.             char[] var5 = new char[var3];
  412.  
  413.             for(int var6 = 0; var6 < var4; ++var6) {
  414.                var5[var6] = this.value[this.offset + var6];
  415.             }
  416.  
  417.             while(var4 < var3) {
  418.                char var7 = this.value[this.offset + var4];
  419.                var5[var4] = var7 == var1 ? var2 : var7;
  420.                ++var4;
  421.             }
  422.  
  423.             return new String(0, var3, var5);
  424.          }
  425.       }
  426.  
  427.       return this;
  428.    }
  429.  
  430.    public String toLowerCase() {
  431.       int var1 = this.count;
  432.  
  433.       for(int var2 = 0; var2 < var1; ++var2) {
  434.          char var5 = this.value[this.offset + var2];
  435.          char var4 = Character.toLowerCase(var5);
  436.          if (var5 != var4) {
  437.             char[] var7 = new char[var1];
  438.  
  439.             int var3;
  440.             for(var3 = 0; var3 < var2; ++var3) {
  441.                var7[var3] = this.value[this.offset + var3];
  442.             }
  443.  
  444.             for(var7[var3++] = var4; var3 < var1; ++var3) {
  445.                var7[var3] = Character.toLowerCase(this.value[this.offset + var3]);
  446.             }
  447.  
  448.             return new String(0, var1, var7);
  449.          }
  450.       }
  451.  
  452.       return this;
  453.    }
  454.  
  455.    public String toUpperCase() {
  456.       int var1 = this.count;
  457.  
  458.       for(int var2 = 0; var2 < var1; ++var2) {
  459.          char var5 = this.value[this.offset + var2];
  460.          char var4 = Character.toUpperCase(var5);
  461.          if (var5 != var4) {
  462.             char[] var7 = new char[var1];
  463.  
  464.             int var3;
  465.             for(var3 = 0; var3 < var2; ++var3) {
  466.                var7[var3] = this.value[this.offset + var3];
  467.             }
  468.  
  469.             for(var7[var3++] = var4; var3 < var1; ++var3) {
  470.                var7[var3] = Character.toUpperCase(this.value[this.offset + var3]);
  471.             }
  472.  
  473.             return new String(0, var1, var7);
  474.          }
  475.       }
  476.  
  477.       return this;
  478.    }
  479.  
  480.    public String trim() {
  481.       int var1 = this.count;
  482.  
  483.       int var2;
  484.       for(var2 = 0; var2 < var1 && this.value[this.offset + var2] <= ' '; ++var2) {
  485.       }
  486.  
  487.       while(var2 < var1 && this.value[this.offset + var1 - 1] <= ' ') {
  488.          --var1;
  489.       }
  490.  
  491.       return var2 <= 0 && var1 >= this.count ? this : this.substring(var2, var1);
  492.    }
  493.  
  494.    public String toString() {
  495.       return this;
  496.    }
  497.  
  498.    public char[] toCharArray() {
  499.       int var1 = this.count;
  500.       char[] var2 = new char[var1];
  501.       System.arraycopy(this.value, this.offset, var2, 0, var1);
  502.       return var2;
  503.    }
  504.  
  505.    public static String valueOf(Object var0) {
  506.       return var0 == null ? "null" : var0.toString();
  507.    }
  508.  
  509.    public static String valueOf(char[] var0) {
  510.       return new String(var0);
  511.    }
  512.  
  513.    public static String valueOf(char[] var0, int var1, int var2) {
  514.       return new String(var0, var1, var2);
  515.    }
  516.  
  517.    public static String copyValueOf(char[] var0, int var1, int var2) {
  518.       return new String(var0, var1, var2);
  519.    }
  520.  
  521.    public static String copyValueOf(char[] var0) {
  522.       int var1 = var0.length;
  523.       return new String(var0, 0, var1);
  524.    }
  525.  
  526.    public static String valueOf(boolean var0) {
  527.       return var0 ? "true" : "false";
  528.    }
  529.  
  530.    public static String valueOf(char var0) {
  531.       char[] var1 = new char[]{var0};
  532.       return new String(0, 1, var1);
  533.    }
  534.  
  535.    public static String valueOf(int var0) {
  536.       return Integer.toString(var0, 10);
  537.    }
  538.  
  539.    public static String valueOf(long var0) {
  540.       return Long.toString(var0, 10);
  541.    }
  542.  
  543.    public static String valueOf(float var0) {
  544.       return Float.toString(var0);
  545.    }
  546.  
  547.    public static String valueOf(double var0) {
  548.       return Double.toString(var0);
  549.    }
  550.  
  551.    public String intern() {
  552.       if (InternSet == null) {
  553.          InternSet = new Hashtable();
  554.       }
  555.  
  556.       String var1 = (String)InternSet.get(this);
  557.       if (var1 != null) {
  558.          return var1;
  559.       } else {
  560.          InternSet.put(this, this);
  561.          return this;
  562.       }
  563.    }
  564.  
  565.    int utfLength() {
  566.       int var1 = this.offset + this.count;
  567.       int var2 = 0;
  568.  
  569.       for(int var3 = this.offset; var3 < var1; ++var3) {
  570.          char var4 = this.value[var3];
  571.          if (var4 >= 1 && var4 <= 127) {
  572.             ++var2;
  573.          } else if (var4 > 2047) {
  574.             var2 += 3;
  575.          } else {
  576.             var2 += 2;
  577.          }
  578.       }
  579.  
  580.       return var2;
  581.    }
  582. }
  583.